package com.margo.project.transaction.configure;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;

import com.zaxxer.hikari.HikariDataSource;

/**
 * 多数据源配置
 * 
 * 配置spring.datasource.slave.url 会报错 jdbcUrl is required with driverClassName
 * 改为 spring.datasource.slave.jdbc-url
 * 参考 https://www.cnblogs.com/jpfss/p/11083472.html
 * @author fangxingbang
 *
 */
@ConditionalOnBean(MargoDataSourceConfiguration.class)
@Configuration
public class MargoDataSourceConfiguration {

	//但有些特殊情况，对同一个接口，可能会有几种不同的实现类，而默认只会采取其中一种的情况下 @Primary 的作用就出来了
	@Bean
	@Primary
	@ConfigurationProperties("spring.datasource")
	public DataSource dataSource() {
		HikariDataSource dataSource=(HikariDataSource) DataSourceBuilder.create().build();
		System.out.println(dataSource.getMinimumIdle());
		dataSource.setMaximumPoolSize(8);//设置最大连接数
		return dataSource;
	}
	
//	//但有些特殊情况，对同一个接口，可能会有几种不同的实现类，而默认只会采取其中一种的情况下 @Primary 的作用就出来了
//	@Bean
//	@Primary
//	@ConfigurationProperties("spring.datasource")
//	public DataSource dataSource(DataSourceProperties properties) {
//		return properties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
//	}
	
	@Bean
	@ConfigurationProperties("spring.datasource.margo")
	@ConditionalOnProperty(name="spring.datasource.margo.enable", havingValue="true")
	public DataSource margoDataSource() {
		return DataSourceBuilder.create().build();
	}

	@Bean
	public JdbcTemplate jdbcTmplate(@Qualifier("dataSource")DataSource dataSource) {
		return new JdbcTemplate(dataSource);
	}
}
